home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / misc / amag / AM95047.lha / p4 / src.lha / src / Inter.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-09  |  6.0 KB  |  243 lines

  1. #include "main.h"
  2. #include "protos.h"
  3. #include "text.h"
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <proto/graphics.h>
  8. #include <proto/gadtools.h>
  9. #include <intuition/gadgetclass.h>
  10. #include <proto/intuition.h>
  11. #include <intuition/intuition.h>
  12. #include <string.h>
  13.  
  14. extern struct Library *GadToolsBase;
  15. extern struct IntuitionBase *IntuitionBase;
  16. extern UWORD Correction;
  17.  
  18. extern struct Window    *Fenetre;
  19. extern struct RastPort    *Rastport;
  20. extern ULONG         idcmp;
  21. extern UWORD         CoorX[XMAX+1],CoorY[YMAX+1];
  22. UBYTE             ListeCoup[XMAX*YMAX+1];
  23. extern struct Gadget    *Gadget[NBGADGETS];
  24.  
  25. extern UBYTE CoupX[10];
  26. UBYTE prof_max;
  27. extern ptrtab terrain;
  28. extern ULONG Positions;
  29.  
  30. extern UBYTE NiveauCourant;
  31. short Evaluation,Debute;
  32.  
  33. UBYTE JJoue(void)
  34. {
  35.  if(terrain->colonnes[CoupX[1]+GAGNE]!=YMAX+GAGNE)
  36.  {
  37.   terrain->jeu[CoupX[1]+GAGNE][terrain->colonnes[CoupX[1]+GAGNE]++]=JOUEUR;
  38.   ListeCoup[ListeCoup[0]++]=CoupX[1];   
  39. #ifdef DEB
  40.  printf("%d\n",EvalTab(terrain));
  41. #endif
  42.   return(1);
  43.  }
  44.  return(0);
  45. }
  46.  
  47. void OJoue(void)
  48. {
  49.  struct TagItem tk[]={GA_Disabled,1,TAG_DONE};
  50.  
  51.  ModifyIDCMP(Fenetre,IDCMP_GADGETUP|IDCMP_RAWKEY);
  52.  GT_SetGadgetAttrsA(Gadget[0],Fenetre,NULL,tk);
  53.  GT_SetGadgetAttrsA(Gadget[2],Fenetre,NULL,tk);
  54.  GT_SetGadgetAttrsA(Gadget[4],Fenetre,NULL,tk);
  55.  GT_SetGadgetAttrsA(Gadget[5],Fenetre,NULL,tk);
  56.  tk[0].ti_Data=0;
  57.  GT_SetGadgetAttrsA(Gadget[3],Fenetre,NULL,tk);
  58.  RefreshGList(Gadget[0],Fenetre,NULL,1);
  59.  RefreshGList(Gadget[2],Fenetre,NULL,4);
  60.  prof_max=NiveauCourant;
  61.  if((ListeCoup[0]>=((XMAX*YMAX<<1)/3))&&(prof_max==4))
  62.   prof_max=6;
  63.  Positions=0;
  64.  Evaluation=GenCoups(-INFINI);
  65. #ifdef DEB
  66.  puts("coucou");
  67. #endif
  68.  if(Evaluation==QUIT)
  69.   do
  70.    CoupX[1]=(rand()%XMAX)+GAGNE;
  71.   while(terrain->colonnes[CoupX[1]]==YMAX+GAGNE);
  72.  terrain->jeu[CoupX[1]][terrain->colonnes[CoupX[1]]++]=ORDINATEUR;
  73. #ifdef DEB
  74.  printf("%d\n",EvalTab(terrain));*/
  75. #endif
  76.  CoupX[1]-=GAGNE;
  77.  ListeCoup[ListeCoup[0]++]=CoupX[1];   
  78.  tk[0].ti_Data=1;
  79.  GT_SetGadgetAttrsA(Gadget[3],Fenetre,NULL,tk);
  80.  tk[0].ti_Data=0;
  81.  GT_SetGadgetAttrsA(Gadget[0],Fenetre,NULL,tk);
  82.  GT_SetGadgetAttrsA(Gadget[2],Fenetre,NULL,tk);
  83.  GT_SetGadgetAttrsA(Gadget[4],Fenetre,NULL,tk);
  84.  GT_SetGadgetAttrsA(Gadget[5],Fenetre,NULL,tk);
  85.  RefreshGList(Gadget[0],Fenetre,NULL,1);
  86.  RefreshGList(Gadget[2],Fenetre,NULL,4);
  87.  ModifyIDCMP(Fenetre,idcmp);
  88. }
  89.  
  90. void Commence(void)
  91. {
  92.  char msg[80];
  93.  
  94.  while(ListeCoup[0]!=1)
  95.   Retour();
  96.  ModifyIDCMP(Fenetre,idcmp);
  97.  Clear(terrain);
  98.  if((rand()>>1)&1)
  99.  {
  100.   Affiche(MSG1);
  101.   Debute=JOUEUR;
  102.  }
  103.  else
  104.  {
  105.   Affiche(MSG2);
  106.   Debute=ORDINATEUR;
  107.   CoupX[1]=rand()%XMAX;
  108.   terrain->jeu[CoupX[1]+GAGNE][terrain->colonnes[CoupX[1]+GAGNE]++]=ORDINATEUR;
  109.   ListeCoup[ListeCoup[0]++]=CoupX[1];   
  110.   MAJ(3);
  111.   sprintf(msg,MSG3,CoupX[1]+1);   
  112.   Affiche(msg);
  113.  }
  114. }
  115.  
  116. void Souris(void)
  117. {
  118.  char msg[80];
  119.  struct TagItem tk[]={GA_Disabled,0,TAG_DONE};
  120.  
  121.  if((Fenetre->GZZMouseY>(CI+7))&&(Fenetre->GZZMouseY<((CC+13)*Correction))&&(Fenetre->GZZMouseX>(VS+2))&&(Fenetre->GZZMouseX<(Fenetre->BorderLeft+VS+2+XMAX*TN)))
  122.  {
  123.   CoupX[1]=(Fenetre->GZZMouseX-(VS+2+Fenetre->BorderLeft))/TN;
  124.   if(JJoue())
  125.   {
  126.    if(ListeCoup[0]==1)
  127.    {
  128.     GT_SetGadgetAttrsA(Gadget[5],Fenetre,NULL,tk);
  129.     RefreshGList(Gadget[5],Fenetre,NULL,1);
  130.    }
  131.    MAJ(2);
  132.    if(TestTab(terrain,JOUEUR))
  133.    {
  134.     ModifyIDCMP(Fenetre,idcmp^IDCMP_MOUSEBUTTONS);
  135.     Affiche(MSG4);
  136.     Arrete();
  137.     return;
  138.    }
  139.    if(ListeCoup[0]==XMAX*YMAX+1)
  140.    {
  141.     ModifyIDCMP(Fenetre,idcmp^IDCMP_MOUSEBUTTONS);
  142.     Affiche(MSG5);
  143.     Arrete();
  144.     return;
  145.    }
  146.    if(ListeCoup[0]==2)
  147.    {
  148.     CoupX[1]=rand()%XMAX;
  149.     CoupX[1]=4;
  150.     terrain->jeu[CoupX[1]+GAGNE][terrain->colonnes[CoupX[1]+GAGNE]++]=ORDINATEUR;
  151.     ListeCoup[ListeCoup[0]++]=CoupX[1];   
  152.     MAJ(3);
  153.     sprintf(msg,MSG12,CoupX[1]+1);   
  154.    }
  155.    else
  156.    {
  157.     Affiche(MSG2);
  158.     OJoue();
  159.     MAJ(3);
  160.     if(TestTab(terrain,ORDINATEUR))
  161.     {
  162.      ModifyIDCMP(Fenetre,idcmp^IDCMP_MOUSEBUTTONS);
  163.      sprintf(msg,MSG7,CoupX[1]+1);   
  164.      Affiche(msg);
  165.      Arrete();
  166.      return;
  167.     }
  168.     if(ListeCoup[0]==XMAX*YMAX+1)
  169.     {
  170.      ModifyIDCMP(Fenetre,idcmp^IDCMP_MOUSEBUTTONS);
  171.      sprintf(msg,MSG5);   
  172.      Affiche(msg);
  173.      Arrete();
  174.      return;
  175.     }
  176.     if(Evaluation==QUIT)
  177.      sprintf(msg,MSG12,CoupX[1]+1);
  178.     else
  179.      if(Evaluation>VICTOIRE-20)
  180.       sprintf(msg,MSG9,CoupX[1]+1,(VICTOIRE-1-Evaluation));
  181.      else
  182.       if(Evaluation<20-VICTOIRE)
  183.        if(Evaluation==-VICTOIRE)
  184.         sprintf(msg,MSG10,CoupX[1]+1);
  185.        else
  186.         sprintf(msg,MSG11,CoupX[1]+1,(VICTOIRE-1+Evaluation));
  187.       else
  188.        if(prof_max!=1)
  189.         sprintf(msg,MSG13,CoupX[1]+1,CoupX[2]-GAGNE+1,Positions,Evaluation);
  190.        else
  191.         sprintf(msg,MSG12,CoupX[1]+1);   
  192.    }
  193.    Affiche(msg);
  194.   }
  195.  }
  196. }
  197.  
  198. void MAJ(char Flag)
  199. {
  200.  UBYTE i;
  201.  
  202.  SetAPen(Rastport,Flag);
  203.  for(i=4;i<=TN-10;i+=2)
  204.   DrawEllipse(Rastport,CoorX[CoupX[1]],CoorY[terrain->colonnes[CoupX[1]+GAGNE]-1-GAGNE],i>>1,(i>>(3-Correction)));
  205. }
  206.  
  207. void Arrete(void)
  208. {
  209.  struct TagItem tk[]={GA_Disabled,1,TAG_DONE};
  210.  
  211.  GT_SetGadgetAttrsA(Gadget[3],Fenetre,NULL,tk);
  212.  RefreshGList(Gadget[3],Fenetre,NULL,1);
  213. }
  214.  
  215. void Retour(void)
  216. {
  217.  struct TagItem tk[]={GA_Disabled,1,TAG_DONE};
  218.  
  219.  ModifyIDCMP(Fenetre,idcmp);
  220.  Affiche("");
  221.  SetAPen(Rastport,0);
  222.  if((!TestTab(terrain,JOUEUR))&&((ListeCoup[0]!=XMAX*YMAX+1)||(Debute==JOUEUR)))
  223.  {
  224.   CoupX[1]=ListeCoup[--ListeCoup[0]];   
  225.   RectFill(Rastport,CoorX[CoupX[1]]-(TN>>1)+1,CoorY[terrain->colonnes[CoupX[1]+GAGNE]-1-GAGNE]-(TN>>2)*Correction+1,CoorX[CoupX[1]]+(TN>>1)-1,CoorY[terrain->colonnes[CoupX[1]+GAGNE]-1-GAGNE]+(TN>>2)*Correction-1);
  226.   terrain->jeu[CoupX[1]+GAGNE][--terrain->colonnes[CoupX[1]+GAGNE]]=RIEN;
  227.   if(ListeCoup[0]==1)
  228.   {
  229.    GT_SetGadgetAttrsA(Gadget[5],Fenetre,NULL,tk);
  230.    RefreshGList(Gadget[5],Fenetre,NULL,1);
  231.    return;
  232.   }
  233.  }
  234.  CoupX[1]=ListeCoup[--ListeCoup[0]];   
  235.  RectFill(Rastport,CoorX[CoupX[1]]-(TN>>1)+1,CoorY[terrain->colonnes[CoupX[1]+GAGNE]-1-GAGNE]-(TN>>2)*Correction+1,CoorX[CoupX[1]]+(TN>>1)-1,CoorY[terrain->colonnes[CoupX[1]+GAGNE]-1-GAGNE]+(TN>>2)*Correction-1);
  236.  terrain->jeu[CoupX[1]+GAGNE][--terrain->colonnes[CoupX[1]+GAGNE]]=RIEN;
  237.  if(ListeCoup[0]<3)
  238.  {
  239.   GT_SetGadgetAttrsA(Gadget[5],Fenetre,NULL,tk);
  240.   RefreshGList(Gadget[5],Fenetre,NULL,1);
  241.  }
  242. }
  243.